package com.cloudcc.ccTool;
/***source_begin***/

import java.security.SecureRandom;
import java.time.LocalDate;


/**
 * Author t.han
 * Date 2024-09-26 10:12
 * Project Quectel-CRM
 * Description //TODO
 */
public class IDGenerator {

    /**
     * 生成20位ID。
     *
     * @param prefix ID编号的前缀（前缀为3位数）。
     * @return 生成的随机码字符串。
     * <p>
     * 该方法通过SecureRandom生成安全随机数，随机码由数字、大写字母和小写字母组成，
     * 每位随机码的类型由0-2的随机数决定，0代表数字，1代表大写字母，2代表小写字母。
     * 这样生成的随机码更难以预测，提高了随机性的安全性。
     */
    public static String generateID(String prefix) {
        StringBuilder uid = new StringBuilder();
        uid.append(prefix);// 拼接前缀
        int currentYear = LocalDate.now().getYear();
        uid.append(currentYear); //拼接当前年份
        // 使用SecureRandom以提高随机性的安全性
        //产生 maxnum 位的强随机数
        SecureRandom rd = new SecureRandom();
//        rd.setSeed(System.currentTimeMillis());
        for (int i = 0; i < 13; i++) {
            // 生成0-2之间的随机数，决定随机码的类型
            //产生0-2的3位随机数
            int type = rd.nextInt(3);
            // 根据随机数的类型生成相应的随机码字符，并追加到StringBuilder中
            switch (type) {
                case 0:
                    // 生成0-9之间的随机数
                    //0-9的随机数
                    uid.append(rd.nextInt(10));
                    break;
                case 1:
                    // 生成大写字母A-Z之间的随机数
                    //ASCII在65-90之间为大写,获取大写随机
                    uid.append((char) (rd.nextInt(26) + 65));
                    break;
                case 2:
                    // 生成小写字母a-z之间的随机数
                    //ASCII在97-122之间为小写，获取小写随机
                    uid.append((char) (rd.nextInt(26) + 97));
                    break;
                default:
                    break;
            }
        }
        return uid.toString();
    }

}
/***source_end***/